package main

import "fmt"

type SayHello interface{
	hello()
}

type Chinese struct{

}

type Americam struct{

}

func (c Chinese)hello(){
	fmt.Println("你好")
}

//中国人特有的方法
func (c Chinese) niuYangGe(){
	fmt.Println("东北文化-扭秧歌")
}

func (a Americam)hello(){
	fmt.Println("Hello")
}

func (a Americam) disco(){
	fmt.Println("disco")
}

func greet(s SayHello){
	s.hello()

	//断言，看s是否能转成Chinese类型并且赋给c变量,flag判断是否转成功
	//解决第二个返回值，判断是否
	// c,flag := s.(Chinese)
	// if flag == true{
	// 	c.niuYangGe()
	// }else{
	// 	fmt.Println("美国人不会扭秧歌")
	// }

	
	// if c,flag := s.(Chinese);flag{
	// 	c.niuYangGe()
	// }else{
	// 	fmt.Println("美国人不会扭秧歌")
	// }

	switch t := s.(type){	//type属于go中的一个关键字，返回类型
		case Chinese:
			t.niuYangGe()
		case Americam:
			t.disco()
	}

	fmt.Println("打招呼")
}


func main(){
	var c Chinese
	// c.hello()

	var a Americam
	// a.hello()

	greet(c)
	greet(a)
}